package com.jandar.spider.utils;

import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @description: 正则表达式
 * @author: Mr.Gao
 * @create: 2020-04-21 11:36
 */
@Slf4j
public class RegularUtils {

    /**
     * 通用正则表达式
     *
     * @param html
     * @param regex
     * @return
     */
    public static String Matcher_getString(String html, String regex) {
        Matcher value = Pattern.compile(regex).matcher(html);
        String data = "";
        while (value.find()) {
            if (StringUtils.hasLength(value.group())) {
                data = value.group();
            }
        }
        return data;
    }

    /**
     * 通用正则表达式
     *
     * @param html
     * @param regex
     * @return
     */
    public static String Matcher_getString(String html, String regex, int i) {
        Matcher value = Pattern.compile(regex).matcher(html);
        String data = "";
        while (value.find()) {
            if (StringUtils.hasLength(value.group())) {
                data = value.group(i);
            }
        }
        return data;
    }

    /**
     * 定制ok_Geo Excel正则
     *
     * @param data
     * @param regex
     * @return
     */
    public static JSONObject getExcelGeoString(String data, String regex) {
        Matcher value = Pattern.compile(regex).matcher(data);
        JSONObject valueData = new JSONObject();
        while (value.find()) {
            if (StringUtils.hasLength(value.group())) {
                String match1 = "\\d+\\.\\d+[eE]\\+\\d+";
                String id = value.group(1);
                if (id.matches(match1)) {
                    id = "0";
                }
                BigDecimal bigDecimal = new BigDecimal(id);
                valueData.put("id", bigDecimal.longValue());
                valueData.put("extPath", value.group(2));
                valueData.put("geo", value.group(3));
                valueData.put("polygon", value.group(4));
            }
        }
        return valueData;
    }

    /**
     * @param html
     * @param regex
     * @return
     */
    public static Integer matcherGetNumber(String html, String regex) {
        Matcher value = Pattern.compile(regex).matcher(html);
        return Integer.parseInt(value.replaceAll(""));
    }

    public static List<String> matcherGetList(String data, String regex) {
        Matcher value = Pattern.compile(regex).matcher(data);
        List<String> list = new ArrayList<>();
        while (value.find()) {
            list.add(value.group());
        }
        return list;
    }


    public static List<String> matcherGetGy(String data, String regex) {
        Matcher value = Pattern.compile(regex).matcher(data);
        List<String> list = new ArrayList<>();
        while (value.find()) {
            list.add(value.group());
        }
        return list;
    }
}
